"""
某公司急需处理一批彩色文本图片业务，由于原图片因当时条件限制，图片存在“反向、倾斜、噪点”等不如意之处，希望利用OpenCV图像变换算法，
将原始图片矫正处理。给定的原始输入图片和处理之后的输出图片参考下图所示。程序代码利用OpenCV+Python环境，参照下列关键技术点，
完成原始图像的矫正处理任务（25分）
"""
import cv2 as cv
import numpy as np

# ①	读取原始图像文件phototext.jpg，打印图片维度和尺度
path = 'data/images/phototext.jpg'
img = cv.imread(path, cv.IMREAD_COLOR)
print(f'打印图片维度和尺度: {img.shape}')
H, W, CH = img.shape

# ②	选定OpenCV图像变换算法
# ③	自己确定原始图和目标图的顶点坐标
pts1 = np.float32([(2185, 2985), (313, 2969), (393, 289)])  # 原始图的顶点坐标
pts2 = np.float32([(0, 0), (W, 0), (W, H)])  # 目标图的顶点坐标

# ④	利用OpenCV库函数，确定并打印变换矩阵M
M = cv.getAffineTransform(pts1, pts2)
print('变换矩阵M:')
print(M)

# 处理图片
dst = cv.warpAffine(img, M, (W, H))

# ⑤	显示原始输入图片和处理之后的输出图片
img_all = np.concatenate((img, dst), axis=1)
rate = 400 / W
img_all = cv.resize(img_all, None, fx=rate, fy=rate, interpolation=cv.INTER_CUBIC)
cv.imshow('src and dst', img_all)
cv.waitKey(0)
